﻿using System;
using System.Data;
using System.Data.SqlClient;
using Onshi.POS.AccesoDatos.Interfaces;

namespace Onshi.POS.AccesoDatos
{
    public class ServicioDatosProveedor : ServicioDatosBase, IServicioDatosProveedor
    {
        #region Constructores

        public ServicioDatosProveedor()
            : base()
        {
        }

        #endregion

        #region Metodos

        public DataSet Proveedor_DevolverTodos()
        {
            try
            {
                var cm = new SqlCommand("Proveedores_DevolverTodos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Proveedores_DevolverPorIdConDetalleDomiciliosTelefonos(Int32 idProveedor)
        {
            try
            {
                var cm = new SqlCommand("Proveedores_DevolverPorIdConDetalleDomiciliosTelefonos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdProveedor", idProveedor));
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Proveedor_DevolverPorId(Int32 idProveedor)
        {
            try
            {
                var cm = new SqlCommand("Proveedor_DevolverPorId", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdRubroArticulo", idProveedor));
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 Proveedor_Insertar(Int32 idRubroProveedor, Byte idTipoIva, Int32 idListaPrecioCompra, String codigo, String nombre, String email, String sitioWeb, Boolean estaEliminado, String cuit)
        {
            try
            {
                var cm = new SqlCommand("Proveedor_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdRubroProveedor", idRubroProveedor));
                cm.Parameters.Add(new SqlParameter("@IdTipoIva", idTipoIva));
                cm.Parameters.Add(new SqlParameter("@IdListaPrecioCompra", idListaPrecioCompra));
                cm.Parameters.Add(new SqlParameter("@Codigo", codigo));
                cm.Parameters.Add(new SqlParameter("@Nombre", nombre));
                cm.Parameters.Add(new SqlParameter("@Email", email));
                cm.Parameters.Add(new SqlParameter("@SitioWeb", sitioWeb));
                cm.Parameters.Add(new SqlParameter("@EstaEliminado", estaEliminado));
                cm.Parameters.Add(new SqlParameter("@Cuit", cuit));
                Conexion.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Proveedor_Modificar(Int32 idProveedor, Int32 idRubroProveedor, Byte idTipoIva, Int32 idListaPrecioCompra, String codigo, String nombre, String email, String sitioWeb, Boolean estaEliminado, String cuit)
        {
            try
            {
                var cm = new SqlCommand("Proveedor_Modificar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdProveedor", idProveedor));
                cm.Parameters.Add(new SqlParameter("@IdRubroProveedor", idRubroProveedor));
                cm.Parameters.Add(new SqlParameter("@IdTipoIva", idTipoIva));
                cm.Parameters.Add(new SqlParameter("@IdListaPrecioCompra", idListaPrecioCompra));
                cm.Parameters.Add(new SqlParameter("@Codigo", codigo));
                cm.Parameters.Add(new SqlParameter("@Nombre", nombre));
                cm.Parameters.Add(new SqlParameter("@Email", email));
                cm.Parameters.Add(new SqlParameter("@SitioWeb", sitioWeb));
                cm.Parameters.Add(new SqlParameter("@EstaEliminado", estaEliminado));
                cm.Parameters.Add(new SqlParameter("@Cuit", cuit));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Proveedor_Eliminar(Int32 idProveedor)
        {
            try
            {
                var cm = new SqlCommand("Proveedor_Eliminar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdProveedor", idProveedor));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ProveedorDetalles_Insertar(Int32 idProveedor, String observacion, Byte[] imagen)
        {
            try
            {
                var cm = new SqlCommand("ProveedorDetalles_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdProveedor", idProveedor));
                cm.Parameters.Add(new SqlParameter("@Observacion", observacion));
                cm.Parameters.Add(new SqlParameter("@Imagen", imagen));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ProveedorDetalles_Modificar(Int32 idProveedor, String observacion, Byte[] imagen)
        {
            try
            {
                var cm = new SqlCommand("ProveedoresDetalles_Modificar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdProveedor", idProveedor));
                cm.Parameters.Add(new SqlParameter("@Observacion", observacion));
                cm.Parameters.Add(new SqlParameter("@Imagen", imagen));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 TelefonosProveedores_Insertar(Int32 idProveedor, Byte idTipoTelefono, String codigoArea, String numero, String observacion)
        {
            try
            {
                var cm = new SqlCommand("TelefonosProveedores_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdProveedor", idProveedor));
                cm.Parameters.Add(new SqlParameter("@IdTipoTelefono", idTipoTelefono));
                cm.Parameters.Add(new SqlParameter("@CodigoArea", codigoArea));
                cm.Parameters.Add(new SqlParameter("@Numero", numero));
                cm.Parameters.Add(new SqlParameter("@Observacion", observacion));
                Conexion.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void DomiciliosProveedores_EliminarPorProveedor(Int32 idProveedor)
        {
            try
            {
                var cm = new SqlCommand("DomiciliosProveedores_EliminarPorProveedores", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdProveedor", idProveedor));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void TelefonosProveedores_EliminarPorProveedor(Int32 idProveedor)
        {
            try
            {
                var cm = new SqlCommand("TelefonosProveedores_EliminarPorProveedor", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdProveedor", idProveedor));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Proveedor_DevolverTodosConDetalleDomiciliosTelefonos()
        {
            try
            {
                var cm = new SqlCommand("Proveedores_DevolverTodosConDetalleDomiciliosTelefonos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 DomiciliosProveedores_Insertar(Int32 idProveedor, Byte idTipoDomicilio, Int32 idBarrio, String calle, String numero, String piso, String departamento, String observacion)
        {
            try
            {
                var cm = new SqlCommand("DomiciliosProveedores_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdProveedor", idProveedor));
                cm.Parameters.Add(new SqlParameter("@IdTipoDomicilio", idTipoDomicilio));
                cm.Parameters.Add(new SqlParameter("@IdBarrio", idBarrio));
                cm.Parameters.Add(new SqlParameter("@Calle", calle));
                cm.Parameters.Add(new SqlParameter("@Numero", numero));
                cm.Parameters.Add(new SqlParameter("@Piso", piso));
                cm.Parameters.Add(new SqlParameter("@Departamento", departamento));
                cm.Parameters.Add(new SqlParameter("@Observacion", observacion));
                Conexion.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        #endregion
    }
}
